package spring.ioc.controller;

import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import spring.ioc.config.UserConfig;
import spring.ioc.service.UserService;

@Controller
public class HelloController {
    //属性注入(无论注入谁都要加入@Autowried)
    //缺点只能在ioc的继承中使用，不能注入final属性
//    @Autowired
//    private UserService userService;
//    @Autowired
//    private UserConfig userConfig;





    //构造方法注入不用Autowried也是可以的(构造方法注入也要写属性进去-)
//    private  UserService us;
//
//    private UserConfig userConfig;


//    public  HelloController(){
//
//    }

    //构造方法注入规则：如果没有指定，默认是无参构造函数
    //如果只写了一个可以不用@Autowried
    //如果写了其他构造方法但没有写@Autowired，默认是最前面那个
    //@Autowired可以指定默认构造方法




//默认调用的是无参的构造函数，所以如果上面和下面一起写会报错
//因为并没有给us进行赋值
//    public HelloController(UserService us ){
//        this.us=us;
//    }
//
//
//    @Autowired//这个东西可以指定默认的构造函数，不然就会使用上面那个
//
//    public HelloController(UserService us, UserConfig userConfig) {
//        this.us = us;
//        this.userConfig = userConfig;
//    }





    //setter方法注入
    private  UserService us;

    private UserConfig userConfig;

    //没有@Autowired是注入不进来的
    @Autowired
    public void setUs(UserService us) {
        this.us = us;
    }

    @Autowired
    public void setUserConfig(UserConfig userConfig) {
        this.userConfig = userConfig;
    }

    public void print(){
        System.out.println("do Contraoller");

//        userService.print();
        System.out.println(us);
        us.print();
        userConfig.print();
    }




}
